package com.luo.jiuyuetest.controller;

import com.luo.jiuyuetest.dto.*;
import com.luo.jiuyuetest.service.ProductpartService;
import com.luo.jiuyuetest.service.SupplierService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author luozhibin
 * @since 2025-11-04
 */
@RestController
@RequestMapping("/api/part")
public class ProductpartController {

    @Autowired
    private ProductpartService productpartService;

    @Autowired
    private SupplierService supplierService;

    /**
     * 更新零件成本
     * 将指定产品类型下的指定零件类型成本翻倍
     * 接口：POST /api/part/update
     * @param request 请求参数（可选，使用默认值：电子产品 + 标准件）
     * @return 更新结果消息
     */
    @PostMapping("/update")
    public String updatePartCost(@RequestBody(required = false) PartUpdateRequest request) {
        try {
            // 如果没有传参数，使用默认值
            if (request == null) {
                request = new PartUpdateRequest();
            }

            String productCategory = request.getProductCategory();
            String partCategory = request.getPartCategory();

            // 调用 Service 层方法
            String result = productpartService.updatePartCostByCategory(productCategory, partCategory);

            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return "更新失败：" + e.getMessage();
        }
    }

    /**
     * 查询供应商列表
     * 支持模糊查询供应商名称
     * 接口：POST /api/part/getSupplierList
     * @param request 请求参数（可选，包含供应商名称用于模糊查询）
     * @return 供应商基本信息列表
     */
    @PostMapping("/getSupplierList")
    public List<SupplierInfoDTO> getSupplierList(@RequestBody(required = false) SupplierQueryRequest request) {
        try {
            // 获取查询参数
            String name = null;
            if (request != null) {
                name = request.getName();
            }

            // 调用 Service 层方法
            List<SupplierInfoDTO> result = supplierService.getSupplierList(name);

            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 查询指定供应商下的符合条件的产品对应的零件
     * 支持分页和排序（按成本从高到低）
     * 接口：POST /api/part/select
     * @param request 请求参数（供应商名称、产品类型、分页参数）
     * @return 分页结果
     */
    @PostMapping("/select")
    public PageResult<PartInfoDTO> selectParts(@RequestBody PartSelectRequest request) {
        try {
            // 获取查询参数
            String supplierName = request.getSupplierName();
            String productCategory = request.getProductCategory();
            Integer pageNum = request.getPageNum();
            Integer pageSize = request.getPageSize();

            // 参数校验
            if (supplierName == null || supplierName.trim().isEmpty()) {
                return new PageResult<>();
            }
            if (productCategory == null || productCategory.trim().isEmpty()) {
                return new PageResult<>();
            }
            if (pageNum == null || pageNum < 1) {
                pageNum = 1;
            }
            if (pageSize == null || pageSize < 1) {
                pageSize = 10;
            }

            // 调用 Service 层方法
            PageResult<PartInfoDTO> result = productpartService.selectPartsByCondition(
                    supplierName, productCategory, pageNum, pageSize);

            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return new PageResult<>();
        }
    }

    /**
     * 删除指定供应商及其所有产品和零件
     * 接口：POST /api/part/delete
     * @param request 请求参数（供应商名称）
     * @return 删除结果消息
     */
    @PostMapping("/delete")
    public String deleteSupplier(@RequestBody SupplierDeleteRequest request) {
        try {
            // 获取供应商名称
            String supplierName = request.getSupplierName();

            // 参数校验
            if (supplierName == null || supplierName.trim().isEmpty()) {
                return "供应商名称不能为空";
            }

            // 调用 Service 层方法
            String result = supplierService.deleteSupplierWithRelated(supplierName);

            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return "删除失败：" + e.getMessage();
        }
    }
}